package com.xingshentech.ugv.operate.module.utils;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import com.xingshentech.ugv.operate.module.constant.Constants;
import com.xstech.library.app.BaseApp;

public class SharedPreferencesUtils {
    /**
     * 保存在手机里面的文件名
     */
    private static final String FILE_NAME = Constants.SP_NAME;


    /**
     * 保存数据的方法，我们需要拿到保存数据的具体类型，然后根据类型调用不同的保存方法
     *
     * @param key
     * @param object
     */
    public static void setParam(String key, Object object) {
        String type = object.getClass().getSimpleName();
        SharedPreferences sp = BaseApp.getApp().getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
//        getSharedPreferences 返回一个 SharedPreferences 实例，
//        通过该实例可以执行 编辑（put）、读取（get） 或 删除（remove） 数据操作。
        SharedPreferences.Editor editor = sp.edit();

        if ("String".equals(type)) {
            editor.putString(key, (String) object);
        } else if ("Integer".equals(type)) {
            editor.putInt(key, (Integer) object);
        } else if ("Boolean".equals(type)) {
            editor.putBoolean(key, (Boolean) object);
        } else if ("Float".equals(type)) {
            editor.putFloat(key, (Float) object);
        } else if ("Long".equals(type)) {
            editor.putLong(key, (Long) object);
        }

        editor.commit();
    }

    /**
     * 得到保存数据的方法，我们根据默认值得到保存的数据的具体类型，然后调用相对于的方法获取值
     *
     * @param key
     * @param defaultObject
     * @return
     */
    public static Object getParam(String key, Object defaultObject) {
        String type = defaultObject.getClass().getSimpleName();
//        用于获取应用的 SharedPreferences 实例，通常用来存储一些小的键值对数据（如配置、设置等）。
//        SharedPreferences 是一种轻量级的数据存储方式，通常用于保存应用的设置或用户的偏好信息。
//        Context.MODE_PRIVATE：表示这个 SharedPreferences 文件是 私有的，
//        只有当前应用可以访问。如果其他应用尝试访问该文件，会被拒绝。
        SharedPreferences sp = BaseApp.getApp().getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);

        if ("String".equals(type)) {
            return sp.getString(key, (String) defaultObject);
        } else if ("Integer".equals(type)) {
            return sp.getInt(key, (Integer) defaultObject);
        } else if ("Boolean".equals(type)) {
            return sp.getBoolean(key, (Boolean) defaultObject);
        } else if ("Float".equals(type)) {
            return sp.getFloat(key, (Float) defaultObject);
        } else if ("Long".equals(type)) {
            return sp.getLong(key, (Long) defaultObject);
        }

        return "";
    }

    public static int getDev_Prod() {
        int b = (int) getParam(Constants.address_key, 0);
        return b;
    }

    public static void setDev_Prod(int flag) {
        setParam(Constants.address_key, flag);
    }
}
